Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_repository_server_manager_hypothesis.py

Displaying Raw • Download


tests/backend/test_repository_server_manager_hypothesis.py v4.6.0-rc.1 (dc200d15) Text, 1.85 KB

T8b949e# SPDX-License-Identifier: 0BSD

T8b949e"""Property tests for repository upload filename sanitization."""

Tff7b72import T7ee787os
Tff7b72import T7ee787re
Tff7b72import T7ee787tempfile

Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st

Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787repository_server_manager Tff7b72import Tb4b4b4(
Te6edf3RepositoryServerManagerTb4b4b4,
Te6edf3_safe_any_upload_filenameTb4b4b4,
Tb4b4b4)

Te6edf3_SAFE_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff[A-Za-z0-9._+Ta5d6ff\Ta5d6ff-]+Ta5d6ff"Tb4b4b4)


Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff250Tb4b4b4, Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3nameTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff400Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_safe_any_upload_filename_never_raisesTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4:
Te6edf3out Tff7b72= Te6edf3_safe_any_upload_filenameTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72if Te6edf3out Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3outTb4b4b4, Tffa657strTb4b4b4)
Tff7b72assert Te6edf3out Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72assert Te6edf3out Tff7b72== Te6edf3name
Tff7b72assert Ta5d6ff"Ta5d6ff..Ta5d6ff" Tff7b72not Tff7b72in Te6edf3out
Tff7b72assert Te6edf3_SAFE_RETff7b72.Td2a8fffullmatchTb4b4b4(Te6edf3outTb4b4b4)


Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff200Tb4b4b4, Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3baseTff7b72=Te6edf3stTff7b72.Td2a8fffrom_regexTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff[A-Za-z0-9._+Ta5d6ff\Ta5d6ff-]Ta5d6ff{Ta5d6ff1,120}Ta5d6ff"Tb4b4b4, Te6edf3fullmatchTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8fffilterTb4b4b4(
Tff7b72lambda Te6edf3bTb4b4b4: Te6edf3b Tff7b72not Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4) Tff7b72and Ta5d6ff"Ta5d6ff..Ta5d6ff" Tff7b72not Tff7b72in Te6edf3b
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_save_upload_roundtrip_for_generated_safe_namesTb4b4b4(Te6edf3baseTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tdTb4b4b4:
Te6edf3mgr Tff7b72= Te6edf3RepositoryServerManagerTb4b4b4(Te6edf3tdTb4b4b4)
Te6edf3okTb4b4b4, Te6edf3err Tff7b72= Te6edf3mgrTff7b72.Td2a8ffsave_uploadTb4b4b4(Te6edf3baseTb4b4b4, Ta5d6ffbTa5d6ff"Tffea00\x00Tffea00\x01Tffea00\x02Ta5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3ok Tff7b72and Te6edf3err Tff7b72is Tff7b72None
Te6edf3dest Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tdTb4b4b4, Ta5d6ff"Ta5d6ffrepository-serverTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffuploadsTa5d6ff"Tb4b4b4, Te6edf3baseTb4b4b4)
Tff7b72assert Te6edf3dest Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3destTb4b4b4)
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3destTb4b4b4)
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3destTb4b4b4) Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tdTb4b4b4, Ta5d6ff"Ta5d6ffrepository-serverTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffuploadsTa5d6ff"Tb4b4b4)


Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff120Tb4b4b4, Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3prefixTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff80Tb4b4b4)Tb4b4b4,
Te6edf3baseTff7b72=Te6edf3stTff7b72.Td2a8fffrom_regexTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff[A-Za-z0-9._+Ta5d6ff\Ta5d6ff-]Ta5d6ff{Ta5d6ff1,40}Ta5d6ff"Tb4b4b4, Te6edf3fullmatchTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_save_upload_rejects_path_traversal_prefixTb4b4b4(Te6edf3prefixTb4b4b4, Te6edf3baseTb4b4b4)Tb4b4b4:
Te6edf3poison Tff7b72= Te6edf3prefix Tff7b72+ Ta5d6ff"Ta5d6ff../Ta5d6ff" Tff7b72+ Te6edf3base
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tdTb4b4b4:
Te6edf3mgr Tff7b72= Te6edf3RepositoryServerManagerTb4b4b4(Te6edf3tdTb4b4b4)
Te6edf3okTb4b4b4, Te6edf3err Tff7b72= Te6edf3mgrTff7b72.Td2a8ffsave_uploadTb4b4b4(Te6edf3poisonTb4b4b4, Ta5d6ffbTa5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4)
Tff7b72assert Tff7b72not Te6edf3ok


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────